home *** CD-ROM | disk | FTP | other *** search
/ Amiga Tools 5 / Amiga Tools 5.iso / spiele / workbench spiele / krsnake / src / tiledbitmap.e < prev    next >
Text File  |  1995-10-25  |  4KB  |  97 lines

  1. OPT MODULE
  2.  
  3. MODULE 'graphics/rastport','graphics/clip','graphics/gfx','datatypes',
  4.        'datatypes/datatypes','datatypes/datatypesclass','datatypes/pictureclass',
  5.        'graphics/view','utility/tagitem','amigalib/boopsi','intuition/screens'
  6.  
  7. EXPORT OBJECT imagedata
  8.     dt:LONG
  9.     bmhd:PTR TO bitmapheader
  10.     bm:PTR TO bitmap
  11. ENDOBJECT
  12.  
  13. EXPORT PROC createImageData(name:PTR TO CHAR,screen:PTR TO screen)
  14.     DEF i:PTR TO imagedata,s=0,bm:PTR TO bitmap,a
  15.     IF name=0 THEN RETURN 0
  16.     IF Char(name)=0 THEN RETURN 0
  17.     NEW i
  18.     i.dt:=NewDTObjectA(name,[DTA_GROUPID,GID_PICTURE,PDTA_REMAP,TRUE,
  19.                              PDTA_SCREEN,screen,
  20.                              PDTA_FREESOURCEBITMAP,TRUE,
  21.                              OBP_PRECISION,PRECISION_EXACT,TAG_DONE])
  22.     IF i.dt<>0
  23.         IF doMethodA(i.dt,[DTM_PROCLAYOUT,NIL,1])
  24.             GetDTAttrsA(i.dt,[PDTA_BITMAPHEADER,{a},TAG_DONE])
  25.             i.bmhd:=a
  26.             GetDTAttrsA(i.dt,[PDTA_DESTBITMAP,{bm},TAG_DONE])
  27.             IF bm=0 THEN GetDTAttrsA(i.dt,[PDTA_BITMAP,{bm},TAG_DONE])
  28.             IF bm
  29.                 a:=GetBitMapAttr(bm,BMA_DEPTH)
  30.                 i.bm:=AllocBitMap(i.bmhd.width,i.bmhd.height,a,IF a=8 THEN BMF_MINPLANES ELSE 0,screen.rastport.bitmap)
  31.                 IF i.bm
  32.                     BltBitMap(bm,0,0,i.bm,0,0,i.bmhd.width,i.bmhd.height,$C0,$FF,NIL)
  33.                     s:=1
  34.                 ENDIF
  35.             ENDIF
  36.         ENDIF
  37.         IF s=0 THEN DisposeDTObject(i.dt)
  38.     ENDIF
  39.     IF s=0
  40.         END i
  41.         i:=0
  42.     ENDIF
  43. ENDPROC i
  44.  
  45. EXPORT PROC disposeImageData(i:PTR TO imagedata)
  46.     IF i.dt THEN DisposeDTObject(i.dt)
  47.     IF i.bm THEN FreeBitMap(i.bm)
  48.     END i
  49. ENDPROC
  50.  
  51. EXPORT PROC copyTiledBitMap(srci:PTR TO imagedata,dst:PTR TO rastport,dstbounds:PTR TO rectangle,flag=0)
  52.     DEF firstsizex,firstsizey,secondminx,secondminy,secondsizex,secondsizey,pos,size,
  53.         src:PTR TO bitmap,srcsizex,srcsizey,srcoffsetx=0,srcoffsety=0
  54.  
  55.     src:=srci.bm
  56.     srcsizex:=srci.bmhd.width
  57.     srcsizey:=srci.bmhd.height
  58.     IF flag=0
  59.         srcoffsetx:=offsmod(dstbounds.minx,srcsizex)
  60.         srcoffsety:=offsmod(dstbounds.miny,srcsizey)
  61.     ENDIF
  62.  
  63.     firstsizex:=Min(srcsizex-srcoffsetx,rectsizex(dstbounds))
  64.     secondminx:=dstbounds.minx+firstsizex
  65.     secondsizex:=Min(srcoffsetx,dstbounds.maxx-secondminx+1)
  66.  
  67.     firstsizey:=Min(srcsizey-srcoffsety,rectsizey(dstbounds))
  68.     secondminy:=dstbounds.miny+firstsizey
  69.     secondsizey:=Min(srcoffsety,dstbounds.maxy-secondminy+1)
  70.  
  71.     BltBitMapRastPort(src,srcoffsetx,srcoffsety,dst,dstbounds.minx,dstbounds.miny,firstsizex,firstsizey,$C0)
  72.     IF secondsizex>0 THEN BltBitMapRastPort(src,0,srcoffsety,dst,secondminx,dstbounds.miny,secondsizex,firstsizey,$C0)
  73.     IF secondsizey>0
  74.         BltBitMapRastPort(src,srcoffsetx,0,dst,dstbounds.minx,secondminy,firstsizex,secondsizey,$C0)
  75.         IF secondsizex>0 THEN BltBitMapRastPort(src,0,0,dst,secondminx,secondminy,secondsizex,secondsizey,$C0)
  76.     ENDIF
  77.     pos:=dstbounds.minx+srcsizex
  78.     size:=Min(srcsizex,dstbounds.maxx-pos+1)
  79.     WHILE pos<=dstbounds.maxx
  80.         BltBitMapRastPort(dst.bitmap,dstbounds.minx+dst.layer.minx,dstbounds.miny+dst.layer.miny,dst,pos,dstbounds.miny,size,Min(srcsizey,rectsizey(dstbounds)),$C0)
  81.         pos:=pos+size
  82.         size:=Min(Shl(size,1),dstbounds.maxx-pos+1)
  83.     ENDWHILE
  84.     pos:=dstbounds.miny+srcsizey
  85.     size:=Min(srcsizey,dstbounds.maxy-pos+1)
  86.     WHILE pos<=dstbounds.maxy
  87.         BltBitMapRastPort(dst.bitmap,dstbounds.minx+dst.layer.minx,dstbounds.miny+dst.layer.miny,dst,dstbounds.minx,pos,rectsizex(dstbounds),size,$C0)
  88.         pos:=pos+size
  89.         size:=Min(Shl(size,1),dstbounds.maxy-pos+1)
  90.     ENDWHILE
  91. ENDPROC
  92.  
  93. PROC rectsizex(r:PTR TO rectangle) IS r.maxx-r.minx+1
  94. PROC rectsizey(r:PTR TO rectangle) IS r.maxy-r.miny+1
  95. PROC offsmod(x,y) IS IF x<0 THEN y-Mod(0-x,y) ELSE Mod(x,y)
  96.  
  97.